home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 1 / Gold Medal Software Volume 1 (Gold Medal) (1994).iso / graphics / tierra40.arj / TIERRA / TSTDIO.C < prev    next >
C/C++ Source or Header  |  1992-09-09  |  11KB  |  391 lines

  1. /* ======================================================================*/
  2. /* tstdio.c  9-9-92  support for stdio frontend for
  3.    Tierra Simulator V4.0: Copyright (c) 1992 Dan Pirone & Virtual Life
  4.    written by Daniel pirone
  5.    v 1.1
  6. */
  7. /* ======================================================================*/
  8. #if FRONTEND == STDIO  /* STDIO == 0 */
  9. /* ======================================================================*/
  10. /* ======================================================================*/
  11. void FEExit(ENO) 
  12. I32s ENO;
  13. {exit(ENO);}
  14. /* ======================================================================*/
  15. void FEClrmsg(n)
  16. I32s n;
  17. {
  18. }
  19. /* ======================================================================*/
  20. void FECeol()
  21. {
  22. }
  23. /* ======================================================================*/
  24. I16s FEGetc()
  25. {
  26. #ifdef __TURBOC__
  27. return getch();
  28. #else 
  29. return getchar();
  30. #endif /* __TURBOC__ */
  31. }
  32. /* ======================================================================*/
  33. void FEStartup()
  34. {
  35. /* called immediately after the soup_in file is read */
  36. /* an opportunity to interactively set soup_in vars */
  37.  
  38. fe_width = 60;
  39. MSG_X = 1;
  40. MSG_Y = 1;
  41. ERR_X = 1;
  42. ERR_Y = 1;
  43. PLN_X = 1;
  44. PLN_Y = 1;
  45.  
  46. #ifdef __TURBOC__
  47. clrscr();
  48. #else
  49. system("clear"); 
  50. #endif
  51. /* Title screen */
  52. printf("\n\n\t\t\t\t      TIERRA\n");
  53. printf("\n\n\t\t\t\t     July  92\n");
  54. printf("\n\t\t\t     Artificial Life System\n\t\t\t\t\tBy\n");
  55. printf("\t\t\t\tDr. Thomas S. Ray\n\t\t\t\t\t&\n");
  56. printf("\t\t    Daniel Pirone, Tom Uffner & Marc Cygnus\n\n");
  57. /* sleep(5); */
  58.  
  59. }
  60. /* ======================================================================*/
  61.  
  62. #ifdef __TURBOC__
  63. void FEPrintf(I32s scr_x, I32s scr_y, I32s scr_a, ... )
  64. #else /* else of __TURBOC__ */
  65. #ifdef __GNUC__
  66. void FEPrintf(I32s scr_x, I32s scr_y, I32s scr_a, ... )
  67. #else
  68. void FEPrintf(scr_x, scr_y, scr_a, va_alist )
  69. I32s scr_x, scr_y, scr_a;
  70. va_dcl
  71. #endif /* __GNUC__ */
  72. #endif /* else of __TURBOC__ */
  73. {
  74.     va_list ap;
  75.  
  76.     I8s *msg_str;
  77. #ifdef __TURBOC__
  78.     va_start(ap,scr_a);
  79. #else /* __TURBOC__ */
  80. #ifdef __GNUC__
  81.     va_start(ap,scr_a);
  82. #else
  83.     va_start(ap);
  84. #endif /* else of __GNUC__ */
  85. #endif /* __TURBOC__ */
  86.     if ((msg_str = va_arg(ap, I8s *)) != NULL)
  87.        {
  88.        vfprintf(stdout,msg_str,ap);
  89.        }
  90.  
  91.     va_end(ap);
  92.     fflush(stdout);
  93.  
  94. }
  95. /* ======================================================================*/
  96.  
  97. #ifdef __TURBOC__
  98. int T_sig_int(void)
  99. #endif
  100.  
  101. #ifdef unix /* unix with stdio ... */
  102.  
  103. void T_sig_int(sig,code,scp,addr)
  104.     I32s  sig,code;
  105.     /* struct sigcontext *scp; */
  106.     I32s *scp; /* DO NOT USE !!!!! */
  107.     I8s  *addr;
  108.  
  109. #endif     /* unix with stdio ... */
  110. {
  111. TC_Menu = 1;
  112. }
  113. /* ======================================================================*/
  114. void FEMenu()
  115. {
  116.    I8s  answer;
  117.    I32s tsz;
  118.    I8s  data[85];
  119. #ifdef ALCOMM
  120.    AL_run_flag = 1;
  121. #endif
  122.    FEError(-1400,NOEXIT,NOWRITE,
  123.            "\n==========================================================");
  124.    FEError(-1401,NOEXIT,NOWRITE,
  125.    "TIERRA: Main Menu");
  126. FEPrintf(0,1,1,"VER=%1.2f INST=%d PLOIDY=%d  %s %s %s %s\n",
  127.                    VER,INST,PLOIDY,
  128. #ifdef ERROR
  129. "ERROR",
  130. #else
  131. "",
  132. #endif
  133. #ifdef MEM_PROF
  134. "MEM_PROF",
  135. #else
  136. "",
  137. #endif
  138. #ifdef MICRO
  139. "MICRO",
  140. #else
  141. "",
  142. #endif
  143. #ifdef ALCOMM
  144. "ALCOMM"
  145. #else
  146. ""
  147. #endif
  148.           );
  149.    FEError(-1402,NOEXIT,NOWRITE,
  150.            "---------------------------------------------------------");
  151.    FEError(-1403,NOEXIT,NOWRITE,
  152. "InstExe.m    = %6ld  InstExec.i = %6ld  NumCells = %4ld ",
  153.        InstExe.m,InstExe.i,NumCells);
  154.   if(GeneBnker)
  155.      {
  156.      FEError(-1404,NOEXIT,NOWRITE,
  157. "NumGenotypes =   %4ld  NumSizes   =   %4ld", NumGenotypes, NumSizes);
  158.      }
  159. #ifdef __TURBOC__
  160.      FEError(-1405,NOEXIT,NOWRITE,"CoreLeft     =  %ld",(I32s) coreleft());
  161. #endif
  162. #ifdef ALCOMM
  163.      FEError(-1406,NOEXIT,NOWRITE,"VPORT        =    %hd", VPORT);
  164. #endif
  165.  
  166.    FEError(-1407,NOEXIT,NOWRITE,
  167.            "---------------------------------------------------------");
  168.    FEError(-1408,NOEXIT,NOWRITE,
  169.     "\tKey\tFunction\n");
  170.    FEError(-1409,NOEXIT,NOWRITE,
  171.     "\ti\tInformation on simulation");
  172.    FEError(-1410,NOEXIT,NOWRITE,
  173.     "\tv\tChange a soup_in variable");
  174.    FEError(-1410,NOEXIT,NOWRITE,
  175.     "\tm\tMisc. commands");
  176.    FEError(-1411,NOEXIT,NOWRITE,
  177.     "\tS\tExecute a system Shell");
  178.    FEError(-1412,NOEXIT,NOWRITE,
  179.     "\ts\tSave the soup");
  180.    FEError(-1413,NOEXIT,NOWRITE,
  181.     "\tq\tSave the soup & quit");
  182.    FEError(-1414,NOEXIT,NOWRITE,
  183.     "\tQ\tQuit/Abort simulation");
  184.    FEError(-1415,NOEXIT,NOWRITE,
  185.     "\tc\tTo Continue simulation");
  186.  
  187.    FEError(-1416,NOEXIT,NOWRITE,
  188.            "---------------------------------------------------------");
  189.    while(1)
  190.       {
  191.       FEError(-1417,NOEXIT,NOWRITE,
  192. "TIERRA | i-info v-var m-misc s-save S-shell q-save&quit Q-quit c-cont |-> ");
  193.  
  194.       fgets(data,84,stdin);
  195.       sscanf(data,"%c", &answer); 
  196.       if (answer == 'c') break; 
  197.       switch (answer)
  198.      {
  199.       case 'v':
  200.       {
  201.       FEError(-1418,NOEXIT,NOWRITE,
  202.            "---------------------------------------------------------");
  203.       FEError(-1419,NOEXIT,NOWRITE,
  204.          "To alter any global variable from soup_in, type");
  205.       FEError(-1420,NOEXIT,NOWRITE,
  206.          "the variable name (using proper case), a space,");
  207.       FEError(-1421,NOEXIT,NOWRITE,
  208.          "an equal sign, a space, and the new value.");
  209.       FEError(-1422,NOEXIT,NOWRITE,
  210.          "Use no space at start of line.  Some examples:");
  211.       FEError(-1423,NOEXIT,NOWRITE,
  212.          "alive = 0");
  213.       FEError(-1424,NOEXIT,NOWRITE,
  214.          "DistProp = .6");
  215.       FEError(-1425,NOEXIT,NOWRITE,
  216.          "GenebankPath = newpath/");
  217.       FEError(-1426,NOEXIT,NOWRITE,
  218.               "---------------------------------------------------------");
  219.    
  220.          fgets(data,84,stdin);
  221.          if (!GetAVar(data))
  222.             {   
  223.         FEError(-1427,NOEXIT,NOWRITE,
  224.            "Not a valid soup_in variable: %s", data);
  225.             }
  226.          ToggleLog(0L);
  227.       break;
  228.       }
  229.    
  230.       case 'i' :
  231.          {
  232.          FEError(-1428,NOEXIT,NOWRITE,
  233.               "---------------------------------------------------------");
  234.          FEError(-1429,NOEXIT,NOWRITE,
  235.               "\ts\tSpectrum of all Size Classes");
  236.          FEError(-1430,NOEXIT,NOWRITE,
  237.               "\tm\tSpectrum of Size Classes, by memory use");
  238.          FEError(-1431,NOEXIT,NOWRITE,
  239.               "\tg\tSpectrum of Size Classes, by geneotype");
  240.          FEError(-1432,NOEXIT,NOWRITE,
  241.               "\tz\tBreak down of a specific Size Class");
  242.          FEError(-1433,NOEXIT,NOWRITE,
  243.           "\t\tAny other key to main menu ...");
  244.          FEError(-1434,NOEXIT,NOWRITE,
  245.               "---------------------------------------------------------");
  246.          fgets(data,84,stdin);
  247.          sscanf(data,"%c", &answer); 
  248.          switch(answer) 
  249.        {
  250.          case 'z':
  251.             {
  252.             FEError(-1435,NOEXIT,NOWRITE,
  253.             "Enter a size class ( eg: 80 ) to examine ");
  254.             fgets(data,84,stdin);
  255.             sscanf(data,"%d", &tsz);
  256.         if (Hist != NULL)
  257.             {  thfree(Hist);
  258.                Hist = NULL;
  259.             }
  260.             query_size((I16u)tsz); 
  261.         break;
  262.             }
  263.          case 'g':
  264.             {  
  265.         IMode = GEN_HIST;
  266.             query_species(20);
  267.             if (Hist)
  268.         {  thfree(Hist);
  269.            Hist = NULL;
  270.             }
  271.         break;
  272.             }
  273.          case 'm':
  274.             {  
  275.         IMode = SIZM_HIST;
  276.             query_species(20);
  277.             if (Hist)
  278.         {  thfree(Hist);
  279.            Hist = NULL;
  280.             }
  281.         break;
  282.             }
  283.          case 's':
  284.             {  
  285.         IMode = SIZ_HIST;
  286.             query_species(20);
  287.             if (Hist)
  288.         {  thfree(Hist);
  289.            Hist = NULL;
  290.             }
  291.         break;
  292.             }
  293.            }
  294.          answer = ' ';break;
  295.          }    /* end  i info case */
  296.       case 'm':
  297.          {  
  298.          FEError(-1434,NOEXIT,NOWRITE,
  299.               "---------------------------------------------------------");
  300.           FEPrintf(HLP_X,HLP_Y,1,
  301. "MISC |  H-Histo Logging  I-Inject Gene %s  %s  |->\n",
  302.  
  303. #ifdef MICRO
  304.           "M-Micro Toggle",
  305. #else
  306.           "",
  307. #endif
  308. #ifdef ALCOMM
  309.           "P-ALmonD Pause"
  310. #else
  311.           ""
  312. #endif
  313.          );
  314.          fgets(data,84,stdin);
  315.          sscanf(data,"%c", &answer);
  316.  
  317.          if (answer == 'H')
  318.             {
  319.             HistPrint = (Log && !HistPrint)? 1 : 0;
  320.             sprintf(mes[0],
  321.              "%s \n",(Log)? (HistPrint)? "Logging Histograms \n":
  322.                                          "NOT Logging Histograms \n" :
  323.                            "Log NOT on ! \n");
  324.             FEMessage(1,mes);
  325.             }
  326. #ifdef MICRO
  327.          if (answer == 'M')
  328.              {
  329.              if(MC_step == -1L) MC_step = 0L;
  330.              else if(MC_step == 0L) MC_step = 1L;
  331.              else {MC_step =-1L; if(tfp_log != NULL) Log = 1L;}
  332.              sprintf(mes[0]," MICRO STEP Mode = %s\n",
  333.              (MC_step == -1)?"off": (MC_step == 1)?"keypress":"delay");
  334.              FEMessage(1,mes);
  335.              }
  336. #endif /* MICRO */
  337. #ifdef ALCOMM
  338.          if (answer == 'P')
  339.              {
  340.              AL_run_flag = (AL_run_flag)?0:1;
  341.              sprintf(mes[0]," ALmond Pause = %s\n",
  342.                      (AL_run_flag)?"off": "on");
  343.              FEMessage(1,mes);
  344.              }
  345. #endif /* ALCOMM */
  346.          if (answer == 'I')
  347.              {
  348.              sprintf(mes[0],"INJECT GENE TO RUNNING SIMULATION\n");
  349.              sprintf(mes[1],"Enter gene name ( eg 0080aaa) or \n");
  350.              sprintf(mes[2],"Enter ESC to cancel\n");
  351.              FEMessage(3,mes);
  352.              fgets(data,84,stdin);
  353.              if (data[0] != 0x1b) InjectFromBank(data, -1, 0);
  354.              sprintf(mes[0]," Attempted Injection of %30s done\n", data);
  355.              FEMessage(1,mes);
  356.              }
  357.           answer = ' ';
  358.       break;
  359.          }     /* end of misc */
  360.       case 's':
  361.          {  
  362.          FEError(-1436,NOEXIT,WRITE," ");
  363.          }
  364.       case 'q':
  365.          {  
  366.          FEError(-1437,EXIT,WRITE," ");
  367.          }
  368.       case 'S':
  369.          {
  370.          FEError(-1438,NOEXIT,NOWRITE,
  371.          "TIERRA: shell (%s), type exit to return ... ",SHELL);
  372.          system(SHELL);
  373.          }
  374.       case 'Q': exit(-666);
  375.          }     /* end switch */
  376.       }     /* end while loop */
  377.    FEError(-1439,NOEXIT,NOWRITE,"\nTIERRA: Continuing from interupt...");
  378.    FEError(-1440,NOEXIT,NOWRITE,
  379.            "==========================================================");
  380. TC_Menu = 0;
  381. #ifdef __TURBOC__
  382.    return(1);
  383. #endif
  384. }
  385. /*-----------------------------------------------------------------------*/
  386.  
  387. /* ======================================================================*/
  388. #endif     /* stdio ... */
  389. /* ======================================================================*/
  390.  
  391.